package org.phantom.securityframework.api;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.phantom.securityframework.api.datapermission.DataDimension;
import org.phantom.securityframework.api.domain.Account;
import org.phantom.securityframework.api.domain.Group;
import org.phantom.securityframework.api.domain.Role;
/**
 * 用户组管理接口
 * @author david
 *
 */
public interface GroupManager {
	/**
	 * 新增用户组
	 * @param group
	 * @return
	 */
	Group add(Group group);
	/**
	 * 修改用户组
	 * @param group
	 * @return
	 */
	Group modify(Group group);
	/**
	 * 移除用户组
	 * @param group
	 * @return
	 */
	Group remove(Group group);
	/**
	 * 移除用户组
	 * @param id
	 * @return
	 */
	Group remove(Integer id);
	/**
	 * 获取用户组
	 * @param id
	 * @return
	 */
	Group get(Integer id);
	/**
	 * 获取用户组集合
	 * @return
	 */
	List<Group> list();
	/**
	 * 条件获取用户组集合
	 * @param params
	 * @return
	 */
	List<Group> list(Map<String, Object> params);
	/**
	 * 用户组总数
	 * @return
	 */
	Integer count();
	/**
	 * 条件用户组总数
	 * @param params
	 * @return
	 */
	Integer count(Map<String,Object> params);

	
	void relAccountGroup(Serializable accountid, Serializable groupIds[]);
	/**
	 * 维护帐号和组关系
	 * @param account
	 * @param groups
	 */
	void relAccountGroup(Account account,Group[] groups);
	/**
	 * 维护帐号和组关系
	 * @param account
	 * @param groups
	 */
	void relAccountGroup(Account account,Serializable[] groupIds);
	/**
	 * 维护帐号和组关系
	 * @param account
	 * @param groups
	 */
	void relAccountGroup(Group group,Account[] accounts);
	/**
	 * 
	 * @param accountId
	 * @param groupIds
	 */
	void unrelAccountGroup(Serializable accountId,Serializable[] groupIds);
	/**
	 * 维护帐号和组关系
	 * @param account
	 * @param groups
	 */
	void unrelAccountGroup(Group group,Account[] accounts);
	
	
	/**
	 * 维护角色和组关系 
	 * @param account
	 * @param groups
	 */
	void relRoleGroup(Role account,Group[] groups);
	/**
	 * 维护角色和组关系 
	 * @param account
	 * @param groups
	 */
	void relRoleGroup(Role account,Serializable[] groupIds);
	/**
	 * 维护角色和组关系 
	 * @param account
	 * @param groups
	 */
	void relRoleGroup(Serializable roleId,Serializable[] groupIds);

	/**
	 * 维护角色和组关系 
	 * @param account
	 * @param groups
	 */
	void unrelRoleGroup(Serializable groupId,Serializable[] roleIds);
	
	
	/**
	 * 获取群组的权限
	 * @param group
	 * @return
	 */
	List<Permission> permissions(Group group);
	
	
	/**
	 * 设置一个组的数据可查看维度
	 * @param group
	 * @param dataDimension
	 */
	void relGroupDataDimension(Group group,DataDimension dataDimension);
	/**
	 * 获取一个组的所有数据可查看维度
	 * @param g
	 * @return
	 */
	DataDimension getDataDimension(Group g);
}
